// 封装axios
import router from '@/router';
import store from '@/store';
import axios from 'axios'
import { Toast } from 'vant';
// 创建axios的副本对象
const instance = axios.create({
    baseURL: 'http://toutiao.itheima.net/'
    // baseURL: 'http://toutiao-app.itheima.net/'
})

// ■ http://toutiao-app.itheima.net/
// ■ 帐号：13912345678
// ■ 验证码：246810

const refInstance = axios.create({
    baseURL: 'http://toutiao.itheima.net/'
    // baseURL: 'http://toutiao-app.itheima.net/'
})

instance.interceptors.request.use(config => {
    // config：当前请求的所有信息
    console.log(store.state.token.token);
    const token = store.state.token.token
    if (token) config.headers.Authorization = `Bear ${token}`
    return config
}, error => {
    return Promise.reject(error)
})

instance.interceptors.response.use(response => {
    return response
}, async error => {
    // 响应错误时会触发这个回调（错误的状态码：400，404, 401, 500）
    if (error.response.status === 401) {
        const refresh_token = store.state.token.refresh_token
        // 注意点：在这不能用 instance ，因为它一旦发送请求会触发自己的请求拦截器，
        // 会将请求头中的 Authorization 用过期 token 覆盖
        try {
            const res = await refInstance({
                url: '/v1_0/authorizations',
                method: 'PUT',
                headers: {
                  Authorization: `Bearer ${refresh_token}`
                }
              })
              store.commit('setToken', {
                  token: res.data.data.token,
                  refresh_token: refresh_token
              })
              // 重新请求之前报错的请求
              return instance(error.config)  // .then
        } catch {
            Toast.fail('登录已经过期')
            router.push('/login')
            return Promise.reject(new Error('refresh_token已过期')) // .then
        }
    }
    return Promise.reject(error) // .then
})

// 暴露副本对象
export default instance